#include <limits.h>  // INT_MIN,INT_MAX

class Solution {
   public:
    int divide(int a, int b) {
        if (a == INT_MIN && b == -1) return INT_MAX;  // 处理造成溢出的情况
        bool flag = (a < 0 ^ b < 0) ? false : true;  // 计算最终结果的符号

        // 将a和b转换为负数以应对：abs(INT_MIN) > abs(INT_MAX)
        if (a > 0) a = -a;
        if (b > 0) b = -b;

        // 从大到小逐个遍历b的2的幂的倍数
        int res = 0;
        while (a <= b) {
            long c = b, n = -1;
            while (a <= c + c) {
                c += c;
                n += n;
            }
            a -= c;
            res += n;
        }
        return flag ? -res : res;  // 调整最终结果的正负性并返回
    }
};